#ifndef _memory_H_
#define _memory_H_
#include "stdint.h"
#include "stdbool.h"
#include "stdio.h"

#define dMemory_LOG(...) printf(__VA_ARGS__)
#define dMemory_FileLineNumberMax_User0 (2000)//用户校准点数上限,多预留了部分;温度区域范围-40℃ - 85℃

typedef enum
{
    eMemory_FileObject_SystemConfiguration = 0,//系统配置文件
    eMemory_FileObject_User0,//用户0数据文件;行数据格式见FileFormatContent_User_StructDef
    eMemory_FileObject_VoltageTemperature,//温度传感器电压对应温度校准数据文件;行数据格式见FileFormatContent_CalibrationData_StructDef
    eMemory_FileObject_VoltageHydrogen,//氢气传感器电压对应氢气浓度校准数据文件;行数据格式见FileFormatContent_CalibrationData_StructDef
    eMemory_FileObject_Num
}Memory_FileObject_EnumDef;
#define dMemory_FileName(object)    \
    ((object == eMemory_FileObject_SystemConfiguration)?((uint8_t *)"SystemConfiguration"):\
    ((object == eMemory_FileObject_User0)?((uint8_t *)"User0"):\
    ((object == eMemory_FileObject_VoltageTemperature)?((uint8_t *)"VoltageTemperature"):\
    ((object == eMemory_FileObject_VoltageHydrogen)?((uint8_t *)"VoltageHydrogen"):\
    ((uint8_t *)"Invalid")))))//获取文件名

typedef struct
{
    uint8_t address;//设备地址
}FileFormatContent_SystemConfiguration_StructDef;//系统配置文件内容格式

typedef struct
{
    uint16_t SerialNumber;//序号;0开始
    float temperature;//温度,单位℃
    float concentration;//浓度
    float VoltageTemperature;//温度检测电压,单位V
    float VoltageHydrogen;//氢气检测电压,单位V
}FileFormatContent_User_StructDef;//用户文件内容格式

typedef struct
{
    uint16_t SerialNumber;//序号;0开始
    float value;//保留值,不同文件赋予不同意义
    float real;//实际值
    float a;
    float b;
}FileFormatContent_CalibrationData_StructDef;//校准数据文件内容格式

uint32_t Memory_FileFormatContentSize_Get(Memory_FileObject_EnumDef object);//获取行数据格式字节数
uint32_t Memory_FileSize_Get(Memory_FileObject_EnumDef object);//获取文件最大字节数(也可以获取所有文件大小,不含对齐扇区损耗)
uint32_t Memory_FileAddress_Get(Memory_FileObject_EnumDef object);//获取文件起始地址(也可以获取文件管理结束地址,含对齐扇区损耗)
uint16_t Memory_FileLineNumber_Read(Memory_FileObject_EnumDef object);//读取文件数据行数
void Memory_FileLineNumber_Write(Memory_FileObject_EnumDef object,uint16_t number);//写入文件数据行数
bool Memory_FileContent_Read(Memory_FileObject_EnumDef object,uint16_t index,void *content,uint16_t number);//文件数据读取
void Memory_FileContent_Write(Memory_FileObject_EnumDef object,uint16_t index,void *content,uint16_t number);//文件数据写入
void Memory_FileDataPrintf(Memory_FileObject_EnumDef object);//文件打印

#endif
